package com.tabnet.form.client;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.tabnet.beans.commande.Commande;
import com.tabnet.dao.DAOCommande;
import com.tabnet.dao.DAOException;
import com.tabnet.form.FormValidationException;

public class ValiderCommandeForm {
	
	private String resultat;
    private Map<String, String> erreurs = new HashMap<String, String>();
    private DAOCommande _oDAOCommande;

    public ValiderCommandeForm( DAOCommande pDAOCommande) {
        this._oDAOCommande = pDAOCommande;
    }

    public Map<String, String> getErreurs() {
        return this.erreurs;
    }
    public String getResultat() {
        return this.resultat;
    }

    private void setErreur( String champ, String message ) {
        this.erreurs.put( champ, message );
    }
    
    /**
     * <p>Fonction updateCommande<br />
     * Met à jour la commande en cours du client, et la date de validation.</p>
     * @param request : objet HttpServletRequest
     * @param pCommande : objet pCommande
     */
    public void updateCommande(HttpServletRequest request, Commande pCommande) {
    	this.traiterCommande(pCommande);
    	
    	try {
            if ( this.erreurs.isEmpty() ) {
            	this._oDAOCommande.updCommande(pCommande.getNum());
                this.resultat = "Succès de la validation de la commande.";
            }
            else
                this.resultat = "Échec de la validation de la commande.";
        }
        catch ( DAOException e ) {
        	this.setErreur( "imprévu", "Erreur imprévue lors de la validation d'une commande dans la base de données." );
            this.resultat = "Échec de la validation de la commande.";
        }
    }
    
    /**
     * <p>Procédure traiterCommande<br />
     * Contrôle une commade</p>
     * @param pCommande: un objet Commande
     * */
    private void traiterCommande(Commande pCommande) {
        try {
            this.validationCommande( pCommande );
        }
        catch ( Exception e ) {
            this.setErreur( "REF", e.getMessage() );
        }
    }
    
    private void validationCommande(Commande pCommande) throws FormValidationException {
        if ( pCommande != null && pCommande.getNum() != null && pCommande.getNum().length() != 10)
            throw new FormValidationException( "Erreur avec le numéro d'un commande" );
    }
    
}
